#include "../../include/common.h"

/*
    递归实现
*/
// void LevelTraverse_Recursion(BiTree T){
//     if (T) {
//         LevelTraverse_Recursion(T->lchild);      //访问该结点的左孩子
//         LevelTraverse_Recursion(T->rchild);      //访问该结点的右孩子
//         PrintBiT(T);                               //调用操作结点数据的函数方法
//     }
//     //如果结点为空，返回上一层
//     return;
// }

/*********************************************************/
/*
    迭代实现：借助队列
*/
//采用顺序队列，初始化创建队列数组
BiTree a[20];
//初始化队头和队尾指针开始时都为0
int front=0,rear=0;

void EnQueue(BiTree *a,BiTree node){
    a[rear++]=node;
}

BiTree DeQueue(BiTree *node){
    return a[front++];
}

void displayNode(BiTree node){
    printf("%d ",node->data);
}

void LevelTraverse_Iterative(BiTree Tree)
{
    //临时指针
    BiTree p;
    EnQueue(a, Tree);
    //当队头和队尾相等时，表示队列为空
    while(front<rear) {
        //队头结点出队
        p=DeQueue(a);
        displayNode(p);
        //将队头结点的左右孩子依次入队
        if (p->lchild!=NULL) {
            EnQueue(a, p->lchild);
       }
        if (p->rchild!=NULL) {
            EnQueue(a, p->rchild);
       }
   }

}




void run(char* param[]) {
    if (strcmp(param[1], "level") != 0)
        return ;
    BiTree Tree;
    CreateBiTree(&Tree);
    printf("层次遍历: \n");
    
    LevelTraverse_Iterative(Tree);

   printf("\n\n");
}